/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.core.view.mbean;

import com.brain.core.common.UtilCore;
import com.brain.core.dto.CatalogoDto;
import com.brain.core.dto.ParametroDto;

import com.brain.core.exception.DAOException;
import com.brain.core.manager.BitacoraManager;
import com.brain.core.manager.CatalogoManager;
import com.brain.core.manager.ParametroManager;
import com.brain.core.manager.RecursosManager;
import com.brain.core.view.util.ConstantesCore;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.primefaces.event.SelectEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Indra
 */
@Controller("parametroMBean")
@Scope("session")
public class ParametroMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(ParametroMBean.class);
    @Resource
    private ParametroManager manager;
    @Resource
    private BitacoraManager bitacoraManager;
    @Resource
    private CatalogoManager catalogoManager;
    @Resource
    private RecursosManager recursosManager;
    @Autowired
    private ApplicationMBean applicationMBean;
    @Autowired
    private SessionMBean sessionMBean;
    private List<ParametroDto> lista;
    private ParametroDto dto;
    private ParametroDto dtoFiltro;
    private String keyEntidad = "key.entidad.parametro";
    private List<CatalogoDto> listaCatalogos;
    private List<CatalogoDto> listaCatalogosBusquedaSistema;
    private List<CatalogoDto> listaCatalogosBusquedaNoSistema;

    public ParametroMBean() {
        this.dtoFiltro = new ParametroDto();
    }

    public String iniciarSistema() {
        this.lista = null;
        this.dto = null;
        this.dtoFiltro = new ParametroDto();
        this.dtoFiltro.setCatalogoDto(new CatalogoDto(catalogoManager.getCatTodos()));
        this.dtoFiltro.setParametroPadreDto(new ParametroDto());
        this.dtoFiltro.setDescripcion("");
        this.dtoFiltro.setEstado(Boolean.TRUE);
        return manager.getUrlListaSistema();
    }

    public String iniciarNoSistema() {
        this.lista = null;
        this.dto = null;
        this.dtoFiltro = new ParametroDto();
        this.dtoFiltro.setCatalogoDto(new CatalogoDto(catalogoManager.getCatTodos()));
        this.dtoFiltro.setParametroPadreDto(new ParametroDto());
        this.dtoFiltro.setDescripcion("");
        this.dtoFiltro.setEstado(Boolean.TRUE);
        return manager.getUrlListaNoSistema();
    }

    public String nuevo() {
        sessionMBean.setAccion(applicationMBean.getNuevo());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));

        this.dto = manager.inicializar();

        /*Si se ha seleccionado en el filtro un catalogo, seteamos el nuevo parametro con este catalogo*/
        if (!this.dtoFiltro.getCatalogoDto().getId().equals(catalogoManager.getCatTodos())) {
            this.dto.setCatalogoDto(this.dtoFiltro.getCatalogoDto());
        }

        return manager.getUrl();
    }

    public String editar() {
        sessionMBean.setAccion(applicationMBean.getEditar());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));
        try {
            this.dto = manager.obtenerPorId(this.dto.getId());
        } catch (DAOException ex) {
            logger.error(ex);
        }
        return manager.getUrl();
    }

    public String ver() {
        sessionMBean.setAccion(applicationMBean.getVer());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));
        try {
            this.dto = manager.obtenerPorId(this.dto.getId());
        } catch (DAOException ex) {
            logger.error(ex);
        }
        return manager.getUrl();
    }

    public void buscarNoSistema() {
        try {
            this.lista = this.manager.obtenerNoSistema(this.dtoFiltro);
        } catch (DAOException ex) {
            showError("ERROR_SISTEMA", ex.getMessage());
        }
    }

    public void buscarSistema() {
        try {
            this.lista = this.manager.obtenerSistema(this.dtoFiltro);
        } catch (DAOException ex) {
            showError("ERROR_SISTEMA", ex.getMessage());
        }
    }

    public String guardar() {
        manager.guardar(this.dto);
        editar();
        return null;
    }

    public void edicionTabla(ParametroDto dtoTabla) {
        try {
            manager.editar(dtoTabla);
            recursosManager.showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (DAOException ex) {
            showError(ex.getMessage());
            logger.error(ex);
        }
    }

    public String verBitacora() {
        bitacoraManager.cargarBitacoraEntidad(manager.getIdEntidad(), this.dto.getId());
        return null;
    }

    public List<ParametroDto> autoCompletarParametro(String query) {
        List<ParametroDto> results = null;
        try {
            results = manager.obtenerTodosActivos(query);
        } catch (DAOException ex) {
            logger.error(ex);
            results = new ArrayList<ParametroDto>();
        }
        return results;
    }

    public void seleccionarParametroPadre(SelectEvent event) {
    }

    public String retroceder() {
        if (dto.getCatalogoDto().getTipo().equals(ConstantesCore.ValoresDefecto.CATALOGO_TIPO_COD_SISTEMA)) {
            buscarSistema();
            return manager.getUrlListaSistema();
        }else{
            buscarNoSistema();
            return manager.getUrlListaNoSistema();
        }
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        ParametroMBean.logger = logger;
    }

    public BitacoraManager getBitacoraManager() {
        return bitacoraManager;
    }

    public void setBitacoraManager(BitacoraManager bitacoraManager) {
        this.bitacoraManager = bitacoraManager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public List<ParametroDto> getLista() {
        return lista;
    }

    public void setLista(List<ParametroDto> lista) {
        this.lista = lista;
    }

    public ParametroDto getDto() {
        return dto;
    }

    public void setDto(ParametroDto dto) {
        this.dto = dto;
    }

    public ParametroDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(ParametroDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyEntidad() {
        return keyEntidad;
    }

    public void setKeyEntidad(String keyEntidad) {
        this.keyEntidad = keyEntidad;
    }

    public ParametroManager getManager() {
        return manager;
    }

    public void setManager(ParametroManager manager) {
        this.manager = manager;
    }

    public CatalogoManager getCatalogoManager() {
        return catalogoManager;
    }

    public void setCatalogoManager(CatalogoManager catalogoManager) {
        this.catalogoManager = catalogoManager;
    }

    public List<CatalogoDto> getListaCatalogos() throws DAOException {
        listaCatalogos = catalogoManager.obtenerActivos();
        return listaCatalogos;
    }

    public void setListaCatalogos(List<CatalogoDto> listaCatalogos) {
        this.listaCatalogos = listaCatalogos;
    }

    public List<CatalogoDto> getListaCatalogosBusquedaSistema() throws DAOException {
        return  catalogoManager.obtenerActivosTodosParaListaParametros(ConstantesCore.ValoresDefecto.CATALOGO_TIPO_COD_SISTEMA);
    }

    public void setListaCatalogosBusquedaSistema(List<CatalogoDto> listaCatalogosBusquedaSistema) {
        this.listaCatalogosBusquedaSistema = listaCatalogosBusquedaSistema;
    }

    public List<CatalogoDto> getListaCatalogosBusquedaNoSistema() throws DAOException {
        return catalogoManager.obtenerActivosTodosParaListaParametros(ConstantesCore.ValoresDefecto.CATALOGO_TIPO_COD_NEGOCIO);
    }

    public void setListaCatalogosBusquedaNoSistema(List<CatalogoDto> listaCatalogosBusquedaNoSistema) {
        this.listaCatalogosBusquedaNoSistema = listaCatalogosBusquedaNoSistema;
    }

}
